package visitor.shape;

public class Client {
    public static void main(String[] args) {
        // 创建图形
        Circle circle = new Circle();
        Rectangle rectangle = new Rectangle();

        // 创建访问者
        IntersectionChecker intersectionChecker = new IntersectionChecker();

        // 让图形接受访问者的访问
        // 双分派发生在 accept 方法的调用上。
        // 调用 circle.accept(intersectionChecker) 时，实际上会调用 IntersectionChecker 中的 visitCircle 方法，这里就发生了第一次分派。
        // 然后，在 visitCircle 方法内部，根据传递进来的 Circle 对象，再次调用了 circle.accept(intersectionChecker)，这里发生了第二次分派，确定了调用的具体方法。
        circle.accept(intersectionChecker);
        rectangle.accept(intersectionChecker);
    }
}
